package kubernetes

import (
	"context"
	"errors"
	"k8s-admin/global"
	"k8s-admin/utils"
	"time"

	v1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type NamespaceList struct {
	Items *v1.NamespaceList
	Total int `json:"total"`
}

func (ns *k8sCluster) GetClusterNamespaceLists(cid string) (*NamespaceList, error) {
	cache, err := utils.GetCache(cid)
	if err != nil {
		global.TPLogger.Error("Node管理模块获取节点:", errors.New("当前集群不存在"))
		return nil, err
	} else {
		var (
			ctx    context.Context
			cancel context.CancelFunc
		)
		ctx, cancel = context.WithTimeout(context.TODO(), time.Second*5)
		defer cancel()
		list, err := cache.CoreV1().Namespaces().List(ctx, metav1.ListOptions{})

		if err != nil {

			global.TPLogger.Error("Namespace模块获取失败: ", errors.New(err.Error()))
			return nil, err
		} else {
			return &NamespaceList{Items: list, Total: len(list.Items)}, nil
		}
	}
}

func (ns *k8sCluster) CreateClusterNamespace(cid, NamespaceName string) error {
	cache, err := utils.GetCache(cid)
	if err != nil {
		global.TPLogger.Error("Node管理模块获取节点:", errors.New("当前集群不存在"))
		return err
	} else {
		var (
			ctx    context.Context
			cancel context.CancelFunc
		)
		ctx, cancel = context.WithTimeout(context.TODO(), time.Second*5)
		defer cancel()
		namespace := &v1.Namespace{
			ObjectMeta: metav1.ObjectMeta{
				Name: NamespaceName,
			},
		}
		_, err := cache.CoreV1().Namespaces().Create(ctx, namespace, metav1.CreateOptions{})
		if err != nil {
			return err
		} else {
			return nil
		}
	}
}

func (ns *k8sCluster) DeleteClusterNamespace(cid, NamespaceName string) error {
	cache, err := utils.GetCache(cid)
	if err != nil {
		global.TPLogger.Error("Node管理模块获取节点:", errors.New("当前集群不存在"))
		return err
	} else {
		var (
			ctx    context.Context
			cancel context.CancelFunc
		)
		ctx, cancel = context.WithTimeout(context.TODO(), time.Second*5)
		defer cancel()

		err := cache.CoreV1().Namespaces().Delete(ctx, NamespaceName, metav1.DeleteOptions{})
		if err != nil {
			return err
		} else {
			return nil
		}
	}
}
